// 没有提交，

#include <bits/stdc++.h>
using namespace std;

struct Status {
  int a;
  int b;
  int c;
};

int visited[5001][5001];
/// 记录达到该状态的步数，也记录该状态有没有访问过 。
// 其实知道前两个状态，就知道第三个瓶子状态，所以没有用三维数组。
int A, B, C; // 杯子的容量
queue<Status> Q;

Status change(int x, int y, int z, int way) {

  // 改变盛水量（从当前状态到下一个状态）
  Status ans = {x, y, z};
  int delta;
  switch (way) {
  case 0:          // B->A, 倒满A杯水
    delta = A - x; // A杯缺的水量
    if (y >= delta) {
      int newx = A;
      int newy = y - delta;
      int newz = z;
      ans = {newx, newy, newz};
    }
    break;

  case 1:          //  B->A, 倒空B杯水
    delta = A - x; // A杯缺的水量
    if (y < delta) {
      int newx = x + y;
      int newy = 0;
      int newz = z;
      ans = {newx, newy, newz};
    }
    break;

  case 2:          //  C->A, 倒满A杯水
    delta = A - x; // A杯缺的水量
    if (z >= delta) {
      int newx = A;
      int newy = y;
      int newz = z - delta;
      ans = {newx, newy, newz};
    }
    break;

  case 3:          // C->A, 倒空C杯水
    delta = A - x; // A杯缺的水量
    if (z < delta) {
      int newx = x + z;
      int newy = y;
      int newz = 0;
      ans = {newx, newy, newz};
    }
    break;

  case 4:          // A->B, 倒满B杯水
    delta = B - y; // B杯缺的水量
    if (x >= delta) {
      int newx = x - delta;
      int newy = B;
      int newz = z;
      ans = {newx, newy, newz};
    }
    break;

  case 5:          //  A->B, 倒空A杯水
    delta = B - y; // B杯缺的水量
    if (x < delta) {
      int newx = 0;
      int newy = y + x;
      int newz = z;
      ans = {newx, newy, newz};
    }
    break;

  case 6:          //  C->B, 倒满B杯水
    delta = B - y; // B杯缺的水量
    if (z >= delta) {
      int newx = x;
      int newy = B;
      int newz = z - delta;
      ans = {newx, newy, newz};
    }
    break;

  case 7:          // C->B, 倒空C杯水
    delta = B - y; // B杯缺的水量
    if (z < delta) {
      int newx = x;
      int newy = y + z;
      int newz = 0;
      ans = {newx, newy, newz};
    }
    break;

  case 8:          // A->C, 倒满C杯水
    delta = C - z; // C杯缺的水量
    if (x >= delta) {
      int newx = x - delta;
      int newy = y;
      int newz = C;
      ans = {newx, newy, newz};
    }
    break;

  case 9:          //  A->C, 倒空A杯水
    delta = C - z; // C杯缺的水量
    if (x < delta) {
      int newx = 0;
      int newy = y;
      int newz = z + x;
      ans = {newx, newy, newz};
    }
    break;

  case 10:         //  B ->C, 倒满C杯水
    delta = C - z; // C杯缺的水量
    if (y >= delta) {
      int newx = x;
      int newy = y - delta;
      int newz = C;
      ans = {newx, newy, newz};
    }
    break;

  case 11:         // B->C , 倒空B杯水
    delta = C - z; // C杯缺的水量
    if (y < delta) {
      int newx = x;
      int newy = 0;
      int newz = z + y;
      ans = {newx, newy, newz};
    }
    break;
  }
  return ans;
}

int minWater = INT_MAX; // 记录杯中最少的水量
int minStep = 0;

int main() {
  cin >> A >> B >> C;
  memset(visited, -1, sizeof(visited));

  Q.push({0, 0, C});
  // visited[C] = 0;
  visited[0][0] = 0; // 标注一下： （0,0,C）状态访问过，并且步数为0;
  while (!Q.empty()) {
    // cout << "size" << Q.size() << endl;
    Status sta = Q.front(); // 出队
    Q.pop();

    int x = sta.a;
    int y = sta.b;
    int z = sta.c;
    // cout << "front" << x << " " << y << " " << z << endl;
    int step = visited[x][y]; // 计算当前状态的步数。

    int t = INT_MAX;
    t = min(t, x == 0 ? INT_MAX : x);
    t = min(t, y == 0 ? INT_MAX : y);
    t = min(t, z == 0 ? INT_MAX : z);

    if (t < minWater) {
      minWater = t;
      minStep = step;
    }
    // cout << "win" << minWater << endl;
    if (minWater == 1) {
      break;
    }

    for (int w = 0; w < 12; w++) { // 遍历12个孩子状态
      Status news = change(x, y, z, w); // 改变盛水量（从当前状态到下一个状态）
      if (visited[news.a][news.b] == -1) {
        Q.push(news); // 入队
        visited[news.a][news.b] = step + 1;
        // 标注一下：（news.a,news.b,C-(news.a+news.b)）状态访问过，记录步数;
      }
    }
  }

  cout << minWater << endl << minStep;
  return 0;
}